﻿using System.Collections.Generic;
using System.Linq;
using Zadani09.db.DAO;


namespace Zadani09.db.DAOimpl
{
    public class SerieDAOmysql : AbstractDAO, ISerieDAO
    {
        public void create(Serie serie)
        {
            initiateConnection();

            db.Serie.InsertOnSubmit(serie);
            db.SubmitChanges();

            closeConnection();
        }

        public Serie load(string id)
        {
            initiateConnection();

            uint ids = uint.Parse(id);

            var result = from s in db.Serie
                         where s.IDSerie == ids
                         select new Serie()
                         {
                             IDSerie = s.IDSerie,
                             IDUmelec = s.IDUmelec,
                             Nazev = s.Nazev,
                             Popis = s.Popis,
                             DlouhyPopis = s.DlouhyPopis,
                         };

            closeConnection();

            Serie nahranaSerie = null;

            List<Serie> list = new List<Serie>();

            foreach (var item in result)
            {
                list.Add(item);
            }


            if (list.Count > 1 || list.Count < 1)
            {
                //throw exeption nejakou...
                nahranaSerie = null;
            }
            else
            {
                nahranaSerie = list.First<Serie>();
            }

            return nahranaSerie;
        }

        public void delete(Serie serie)
        {
            initiateConnection();

            db.Serie.Attach(serie);
            db.Serie.DeleteOnSubmit(serie);

            db.SubmitChanges();

            closeConnection();
        }

        public void delete(string id)
        {

            Serie serie = new Serie();
            serie.IDSerie = uint.Parse(id);

            this.delete(serie);
        }

        public System.Collections.Generic.List<Serie> nahrejListSerii(int odkud, int kolik)
        {

            initiateConnection();

            var result = from s in db.Serie select s;

            closeConnection();

            List<Serie> list = result.ToList<Serie>();

            return list;
        }

        public void pridejDilo(SerieDilo serieDilo)
        {
            initiateConnection();

            db.SerieDilo.InsertOnSubmit(serieDilo);
            db.SubmitChanges();

            closeConnection();
        }

        public void pridejDilo(string idSerie, string idDilo)
        {
            SerieDilo serieDilo = new SerieDilo();

            serieDilo.IDSerie = uint.Parse(idSerie);
            serieDilo.IDDilo = uint.Parse(idDilo);

            this.pridejDilo(serieDilo);
        }

        public void pridejDilo(Serie serie, Dilo dilo)
        {
            SerieDilo serieDilo = new SerieDilo();

            serieDilo.IDSerie = serie.IDSerie;
            serieDilo.IDDilo = dilo.IDDilo;

            this.pridejDilo(serieDilo);
        }

        public void smazDilo(Serie serie, Dilo dilo)
        {
            SerieDilo serieDilo = new SerieDilo();

            serieDilo.IDSerie = serie.IDSerie;
            serieDilo.IDDilo = dilo.IDDilo;

            this.smazDilo(serieDilo);
        }

        public void smazDilo(string idSerie, string idDila)
        {
            SerieDilo serieDilo = new SerieDilo();

            serieDilo.IDSerie = uint.Parse(idSerie);
            serieDilo.IDDilo = uint.Parse(idDila);

            this.smazDilo(serieDilo);
        }

        public void smazDilo(SerieDilo serieDilo)
        {
            initiateConnection();

            db.SerieDilo.Attach(serieDilo);
            db.SerieDilo.DeleteOnSubmit(serieDilo);

            db.SubmitChanges();

            closeConnection();
        }


        public void update(Serie nova)
        {
            initiateConnection();

            uint id = nova.IDSerie;

            var updateQ = db.Serie.First(e => e.IDSerie == id);

            //nevim jestli se bude menit umelec u serii, leda ze by ji odkoupil :]
            updateQ.IDUmelec = nova.IDUmelec;
            updateQ.Nazev = nova.Nazev;
            updateQ.Popis = nova.Popis;
            updateQ.DlouhyPopis = nova.DlouhyPopis;

            db.SubmitChanges();


            closeConnection();
        }


        public List<Serie> loadList(int odkud, int kolik)
        {
            initiateConnection();

            var result = from u in db.Serie select u;

            List<Serie> list = result.ToList<Serie>();

            closeConnection();

            return list;
        }

    }
}
